Programmable integrated circuit devices (programmable ICs) are a well-known type of integrated circuit that can be programmed to perform specified logic functions. Examples of programmable ICs include the field programmable gate array (FPGA) and the complex programmable logic device (CPLD). The functionality of most programmable ICs is controlled by data bits provided to the device for that purpose. The data bits can be stored in volatile memory (e.g., static memory cells, as in FPGAs and some CPLDs), in non-volatile memory (e.g., FLASH memory, as in some CPLDs), or in any other type of memory cell.
Other programmable ICs are programmed by applying a processing layer, such as a metal layer, that programmably interconnects the various elements on the device. These programmable ICs are known as mask programmable devices. Programmable ICs can also be implemented in other ways, e.g., using fuse or antifuse technology. The phrase “programmable IC” can include, but is not limited to these devices and further can encompass devices that are only partially programmable. For example, one type of programmable IC includes a combination of hard-coded transistor logic and a programmable switch fabric that programmably interconnects the hard-coded transistor logic.
When a circuit design is implemented on a programmable IC, the components of the circuit design must be assigned to suitable programmable resources on the programmable IC. This process is referred to as “placement.” Placement generally includes two phases. The first phase is referred to as “global placement.” During global placement, each component of the circuit design is assigned an (x, y) coordinate location on the programmable IC. Each (x, y) coordinate assignment, however, does not necessarily coincide with a location of a programmable hardware resource, referred to as a “site,” on the programmable IC. During the second phase of placement, referred to as “detailed placement,” each component is assigned to a particular site on the programmable IC that is nearby the (x, y) coordinate determined for that component during the global placement phase.